package com.yougong.api.modules.customer.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.yougong.api.modules.customer.model.dto.*;
import com.yougong.api.modules.customer.model.pojo.CusUser;
import com.yougong.common.api.CommonResult;
import org.springframework.http.ResponseEntity;

import java.io.IOException;
import java.util.List;

public interface CusUserService extends IService<CusUser> {

    /**
     * 保存用户信息
     * @param cusUser
     * @return
     */
    CommonResult saveUser(CusUser cusUser);

    /**
     * 根据用户名查询用户
     * @param phonenumber
     * @return
     */
    CusUser getByPhonenumber(String phonenumber);

    /**
     * 更改用户信息
     * @param userDto
     * @return
     */
    CommonResult updateUser(UserDto userDto);

    /**
     * 根据用户名 和 密码 查找用户
     * @param possword
     * @param username
     * @return
     */
    CusUser getByUserNameAndPossword(String possword, String username);

    /**
     * 登录
     * @param username
     * @param password
     * @return
     */
    CommonResult login(String username, String password);

    /**
     * 条件查询所有用户
     * @param userListDto
     * @return
     */
    CommonResult getCusUserList(UserListDto userListDto);

    /**
     * 修改密码
     * @param passWordDto
     * @return
     */
    CommonResult updatePassword(PassWordDto passWordDto);

    /**
     * 批量修改用户状态
     * @param statusDtoList
     * @return
     */
    CommonResult updateStatus(List<StatusDto> statusDtoList);

    /**
     * 获取验证码
     * @param key
     * @return
     */
    ResponseEntity<byte[]> getVerificationCode(String key) throws IOException;

    /**
     * 获取邮箱验证码
     * @param emailCodeDto
     * @return
     */
    CommonResult getEmailCode(EmailCodeDto emailCodeDto);

    /**
     * 重置密码（邮箱验证）
     * @param emailCodeDto
     * @return
     */
    CommonResult resetPassword(EmailCodeDto emailCodeDto);

    /**
     * 根据用户名和邮箱查询用户
     * @param userName
     * @param email
     * @return
     */
    CusUser getByEmailAndUserName(String userName, String email);

    /**
     * 校验验证码 发送邮箱验证码
     * @param emailDto
     * @return
     */
    CommonResult checkVerificationCode(EmailDto emailDto);

    /**
     * 根据用户名查询 但是无密码
     * @param username
     * @return
     */
    CusUser getByUserNameHavePW(String username);

    /**
     * 判断是否存在该邮箱
     * @param email
     * @return
     */
    Boolean getByEmail(String email);

    /**
     * 邮箱登录
     * @param loginDto
     * @return
     */
    CommonResult emailLogin(LoginDto loginDto);

}
